package org.wzh.three.jvm.oom;

/**
 * 虚拟机栈和本地方法栈溢出
 * @author ewanhiz
 * VM Args: -Xss20m
 */
public class JavaVMStackOOM {

    private void dontStop() {
        while (true) {}
    }

    public void stackLeakByThread() {
        while (true) {
            Thread thread = new Thread(this::dontStop);
            thread.start();
        }
    }

    /**
     * 在 windows 平台的虚拟机中,Java 的线程是映射到操作系统的内核线程上的,因此改代码执行可能导致
     * 操作系统假死.
     * @param args
     */
    public static void main(String[] args) {
        JavaVMStackOOM oom = new JavaVMStackOOM();
        oom.stackLeakByThread();
    }

}
